package com.pacvue.annotation;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 限流注解，注解优先级高于RedisLimiterProperties配置
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RateLimiter {
    /**
     * 限流的key, 支持 SpEL 表达式，如 #ip, #userId
     */
    String key() default "";

    /**
     * 令牌桶的总容量；如果值为-1，则默认使用properties中配置的值
     */
    int capacity() default -1;

    /**
     * 每秒产生的令牌数；如果值为-1，则默认使用properties中配置的值
     */
    double rate() default -1;

    /**
     * 等待令牌的最大等待时间（阻塞式等待，会占用当前线程）；如果值为-1，则默认使用properties中配置的值
     */
    int timeout() default -1;


}
